package DyingBaby.demo;

import DyingBaby.backend.common.CacheConfig;
import DyingBaby.backend.dm.pageCache.PageCache;
import DyingBaby.backend.dm.pageCache.PageCacheImpl;
import java.io.File;

/**
 * 支持命令行参数的缓存配置演示程序
 * 
 * 使用方法:
 * java -cp "target/classes;lib/*" DyingBaby.demo.CacheConfigCLI [选项]
 * 
 * 选项:
 *   --stats on/off     启用/禁用统计功能
 *   --logging on/off   启用/禁用日志记录
 *   --autoPrint on/off 启用/禁用自动打印
 *   --help             显示帮助信息
 */
public class CacheConfigCLI {
    
    public static void main(String[] args) {
        try {
            // 解析命令行参数
            parseArguments(args);
            
            // 显示当前配置
            System.out.println("=== 缓存配置CLI演示 ===");
            System.out.println("当前配置: " + CacheConfig.getConfigInfo());
            
            // 创建临时测试文件
            File testFile = File.createTempFile("cache_cli_demo", ".db");
            testFile.deleteOnExit();
            
            // 先删除可能存在的文件
            if (testFile.exists()) {
                testFile.delete();
            }
            
            // 创建页面缓存
            PageCacheImpl pageCache = PageCache.create(testFile.getAbsolutePath().replace(".db", ""), 80 * 1024);
            
            System.out.println("\n开始执行缓存操作...");
            
            // 执行一些缓存操作
            int page1 = pageCache.newPage("Page 1 data".getBytes());
            int page2 = pageCache.newPage("Page 2 data".getBytes());
            int page3 = pageCache.newPage("Page 3 data".getBytes());
            
            System.out.println("创建了3个页面: " + page1 + ", " + page2 + ", " + page3);
            
            // 访问页面
            pageCache.getPage(page1);
            pageCache.getPage(page2);
            pageCache.getPage(page3);
            
            // 再次访问（测试命中）
            pageCache.getPage(page1);
            pageCache.getPage(page2);
            
            // 手动打印统计信息
            System.out.println("\n手动打印统计信息:");
            pageCache.printCacheStats();
            
            // 生成性能报告
            System.out.println("\n性能报告:");
            System.out.println(pageCache.getCachePerformanceReport());
            
            pageCache.close();
            
            System.out.println("\n=== 操作完成 ===");
            
        } catch (Exception e) {
            System.err.println("程序执行失败: " + e.getMessage());
            e.printStackTrace();
        }
    }
    
    /**
     * 解析命令行参数
     */
    private static void parseArguments(String[] args) {
        for (int i = 0; i < args.length; i++) {
            String arg = args[i];
            
            switch (arg) {
                case "--stats":
                    if (i + 1 < args.length) {
                        String value = args[++i];
                        if ("on".equalsIgnoreCase(value)) {
                            CacheConfig.setStatsEnabled(true);
                            System.out.println("统计功能已启用");
                        } else if ("off".equalsIgnoreCase(value)) {
                            CacheConfig.setStatsEnabled(false);
                            System.out.println("统计功能已禁用");
                        } else {
                            System.err.println("无效的stats值: " + value + " (应该是 on 或 off)");
                        }
                    } else {
                        System.err.println("--stats 需要参数 (on 或 off)");
                    }
                    break;
                    
                case "--logging":
                    if (i + 1 < args.length) {
                        String value = args[++i];
                        if ("on".equalsIgnoreCase(value)) {
                            CacheConfig.setLoggingEnabled(true);
                            System.out.println("日志记录已启用");
                        } else if ("off".equalsIgnoreCase(value)) {
                            CacheConfig.setLoggingEnabled(false);
                            System.out.println("日志记录已禁用");
                        } else {
                            System.err.println("无效的logging值: " + value + " (应该是 on 或 off)");
                        }
                    } else {
                        System.err.println("--logging 需要参数 (on 或 off)");
                    }
                    break;
                    
                case "--autoPrint":
                    if (i + 1 < args.length) {
                        String value = args[++i];
                        if ("on".equalsIgnoreCase(value)) {
                            CacheConfig.setAutoPrintEnabled(true);
                            System.out.println("自动打印已启用");
                        } else if ("off".equalsIgnoreCase(value)) {
                            CacheConfig.setAutoPrintEnabled(false);
                            System.out.println("自动打印已禁用");
                        } else {
                            System.err.println("无效的autoPrint值: " + value + " (应该是 on 或 off)");
                        }
                    } else {
                        System.err.println("--autoPrint 需要参数 (on 或 off)");
                    }
                    break;
                    
                case "--help":
                    printHelp();
                    System.exit(0);
                    break;
                    
                default:
                    System.err.println("未知参数: " + arg);
                    printHelp();
                    System.exit(1);
            }
        }
    }
    
    /**
     * 打印帮助信息
     */
    private static void printHelp() {
        System.out.println("缓存配置CLI演示程序");
        System.out.println();
        System.out.println("使用方法:");
        System.out.println("  java -cp \"target/classes;lib/*\" DyingBaby.demo.CacheConfigCLI [选项]");
        System.out.println();
        System.out.println("选项:");
        System.out.println("  --stats on/off     启用/禁用统计功能");
        System.out.println("  --logging on/off   启用/禁用日志记录");
        System.out.println("  --autoPrint on/off 启用/禁用自动打印");
        System.out.println("  --help             显示此帮助信息");
        System.out.println();
        System.out.println("示例:");
        System.out.println("  java -cp \"target/classes;lib/*\" DyingBaby.demo.CacheConfigCLI --stats on --logging off");
        System.out.println("  java -cp \"target/classes;lib/*\" DyingBaby.demo.CacheConfigCLI --autoPrint on");
        System.out.println();
        System.out.println("也可以通过系统属性设置:");
        System.out.println("  -Dmydb.cache.stats=true/false");
        System.out.println("  -Dmydb.cache.logging=true/false");
        System.out.println("  -Dmydb.cache.autoPrint=true/false");
    }
}
